Modern computer systems are frequently implemented as virtual computer systems operating collectively on one or more host computer systems. The virtual computer systems may utilize resources of the host computer systems such as processors, memory, network interfaces, and storage services and may have a variety of software running on the virtual computer systems. When the underlying hardware of the host computer system changes as a result of, for example, a new processor becoming available, or when software is updated on the virtual computer system, or when a new operating system version becomes available for the virtual computer system, the virtual computer system may be updated or refreshed.
Issuing commands to a small number of virtual computer systems to initiate such refresh operations can be a relatively simple task, but when a user has a large number of such virtual machine instances to refresh, the task can be considerably more difficult, particularly when, as is typical, a user may have a heterogeneous environment, with multiple hardware types, multiple operating systems, multiple versions of those operating systems, and a variety of software related to the tasks performed on the virtual computer system instances. Manually connecting to each instance to determine what refresh operations should be performed on that particular instance based on the configuration and/or underlying hardware of the virtual machine instance would take a significant amount of time. Furthermore, this manual refresh process can take a significant amount of time, during which the ability of a user to interact with the virtual computer system during that time period may be eliminated or at least severely restricted. Such a manual refresh may also lead to the possibility of out of date virtual machine instances with security vulnerabilities, outmoded operating systems, or out of date software, leading to decreased security of a virtual machine instance and a degraded customer experience.